package com.interview.rtc.aigc.utils;

import com.interview.rtc.aigc.common.BusinessException;
import com.interview.rtc.aigc.common.ErrorCode;

/**
 * 异常工具类，提供便捷的异常抛出方法
 */
public class ExceptionUtil {

    /**
     * 抛出业务异常
     *
     * @param message 错误信息
     */
    public static void throwBizException(String message) {
        throw new BusinessException(message);
    }

    /**
     * 抛出业务异常
     *
     * @param code    错误码
     * @param message 错误信息
     */
    public static void throwBizException(int code, String message) {
        throw new BusinessException(code, message);
    }

    /**
     * 断言对象非空，否则抛出业务异常
     *
     * @param object     待检查对象
     * @param message    错误信息
     * @param <T>        对象类型
     * @return           检查后的对象
     */
    public static <T> T assertNotNull(T object, String message) {
        if (object == null) {
            throw new BusinessException(message);
        }
        return object;
    }

    /**
     * 断言对象非空，否则抛出业务异常
     *
     * @param object     待检查对象
     * @param code       错误码
     * @param message    错误信息
     * @param <T>        对象类型
     * @return           检查后的对象
     */
    public static <T> T assertNotNull(T object, int code, String message) {
        if (object == null) {
            throw new BusinessException(code, message);
        }
        return object;
    }

    /**
     * 断言条件为真，否则抛出业务异常
     *
     * @param condition  条件
     * @param message    错误信息
     */
    public static void assertTrue(boolean condition, String message) {
        if (!condition) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言条件为真，否则抛出业务异常
     *
     * @param condition  条件
     * @param code       错误码
     * @param message    错误信息
     */
    public static void assertTrue(boolean condition, int code, String message) {
        if (!condition) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言条件为假，否则抛出业务异常
     *
     * @param condition  条件
     * @param message    错误信息
     */
    public static void assertFalse(boolean condition, String message) {
        if (condition) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言条件为假，否则抛出业务异常
     *
     * @param condition  条件
     * @param code       错误码
     * @param message    错误信息
     */
    public static void assertFalse(boolean condition, int code, String message) {
        if (condition) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 用户不存在异常
     */
    public static void throwUserNotExistException() {
        throw new BusinessException(ErrorCode.USER_NOT_EXIST, "用户不存在");
    }

    /**
     * 用户密码错误异常
     */
    public static void throwUserPasswordErrorException() {
        throw new BusinessException(ErrorCode.USER_PASSWORD_ERROR, "密码错误");
    }

    /**
     * 用户已存在异常
     */
    public static void throwUserAlreadyExistException() {
        throw new BusinessException(ErrorCode.USER_ALREADY_EXIST, "用户已存在");
    }

    /**
     * 会话不存在异常
     */
    public static void throwSessionNotExistException() {
        throw new BusinessException(ErrorCode.SESSION_NOT_EXIST, "会话不存在");
    }

    /**
     * 未授权异常
     */
    public static void throwUnauthorizedException() {
        throw new BusinessException(ErrorCode.UNAUTHORIZED, "未授权");
    }

    /**
     * 禁止访问异常
     */
    public static void throwForbiddenException() {
        throw new BusinessException(ErrorCode.FORBIDDEN, "禁止访问");
    }
} 